package com.qidian.mes.sys.service.impl;

import com.qidian.mes.pojo.EncodingRules;
import com.qidian.mes.sys.mapper.EncodingRulesMapper;
import com.qidian.mes.sys.service.EncodingRulesService;
import com.qidian.mes.util.Tools;
import com.qidian.mes.util.exceptions.ServiceException;
import com.qidian.mes.util.pojo.QdResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * @Author 戴着假发的程序员
 * @Company 起点编程
 * @Description
 * @Time 2024/4/7 10:52
 */
@Service
public class EncodingRulesServiceImpl implements EncodingRulesService {

    @Value("${codePatternLength}")
    private int codePatternLength;

    @Autowired
    private EncodingRulesMapper encodingRulesMapper;
    @Override
    public QdResult query(String ruleName) {
        String code = "";
        // 查询规则信息
        EncodingRules encodingRules = encodingRulesMapper.selectByName(ruleName);
        // 根据规则中的pattern生成现在的pattern
        String pattern = "";
        String dateStr = Tools.now(); // yyyy-MM-dd
        switch (encodingRules.getRulesPattern()){
            case 1:
                pattern = dateStr.split("-")[0];
                break;
            case 2:
                pattern = dateStr.substring(0,7).replace("-","");
                break;
            case 3:
                pattern = dateStr.replace("-","");
                break;
            default:
                // 抛出异常
                throw new ServiceException("编号的格式类别有误，应该从1,2,3中选择，但是传递的是:"  + encodingRules.getRulesPattern());
        }
        // 比较生成的pattern和现在存储在数据表中的pattern是否相同
        if(pattern.equals(encodingRules.getCurrPattern())){
            // 给最大顺位号+1就可以生产编码了
            String max = encodingRules.getMaxNumber() + 1 + "";
            // 给max前面补0
            while (max.length() < codePatternLength){
                max = "0" + max;
            }
            // 生成编码
            code = encodingRules.getRulesPer() + pattern + max;
            // 修改数据库的最大编码
            encodingRules.setMaxNumber(encodingRules.getMaxNumber() + 1);
        }else{
            // 最大顺位号重置为1
            String max = "1";
            // 给max前面补0
            while (max.length() < codePatternLength){
                max = "0" + max;
            }
            // 生成编码
            code = encodingRules.getRulesPer() + pattern + max;
            // 修改数据库的最大编码和currPattern
            encodingRules.setMaxNumber(1);
            encodingRules.setCurrPattern(pattern);
        }
        // 更新编码规则
        encodingRulesMapper.updateById(encodingRules);
        // 返回生成的编码
        return QdResult.success("OK",code);
    }
}
